package com.example.myspringboot.design.singleton;

/**
 * @Author ZhengShan
 * @Date 2024 06 24 14 51
 * 是lazy初始化，多线程安全。
 * 利用了ClassLoader的机制保证了线程安全；
 * 不同的是，饿汉式在类被加载时就创建了一个实例对象，而静态内部类即使类被加载也不会创建单例对象，
 * 除非调用里面的getInstance()方法。因为当Singleton类被加载时，其静态内部类SingletonHolder没有被主动使用。
 * 只有当调用getInstance方法时，才会装载SingletonHolder类，从而实例化单例对象。
 * 这样，通过静态内部类的方法就实现了lazy loading，很好地将懒汉式和饿汉式结合起来，既实现延迟加载，保证系统性能，也能保证线程安全。
 **/
public class SingletonStaticDemo {

    private static class SingletonHolder{
        private static final SingletonStaticDemo INSTANCE = new SingletonStaticDemo();
    }

    private SingletonStaticDemo() {
    }

    public static final SingletonStaticDemo getInstance(){
        return SingletonHolder.INSTANCE;
    }
}
